home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 2.iso / dist / fw_glimpse.idb / usr / freeware / src / glimpse-3.0 / libtemplate / include / ccache.h.z / ccache.h
C/C++ Source or Header  |  1997-09-09  |  10KB  |  323 lines

  1. /*
  2.  *  ccache.h - FTP Connection Cache
  3.  *
  4.  *  David Merkel & Mark Peterson, University of Colorado - Boulder, July 1994
  5.  *
  6.  *  $Id: ccache.h,v 1.6 1995/01/10 16:30:20 hardy Exp $
  7.  *
  8.  *  ----------------------------------------------------------------------
  9.  *  Copyright (c) 1994, 1995.  All rights reserved.
  10.  *  
  11.  *          Mic Bowman of Transarc Corporation.
  12.  *          Peter Danzig of the University of Southern California.
  13.  *          Darren R. Hardy of the University of Colorado at Boulder.
  14.  *          Udi Manber of the University of Arizona.
  15.  *          Michael F. Schwartz of the University of Colorado at Boulder. 
  16.  *  
  17.  *  This copyright notice applies to all code in Harvest other than
  18.  *  subsystems developed elsewhere, which contain other copyright notices
  19.  *  in their source text.
  20.  *  
  21.  *  The Harvest software was developed by the Internet Research Task
  22.  *  Force Research Group on Resource Discovery (IRTF-RD).  The Harvest
  23.  *  software may be used for academic, research, government, and internal
  24.  *  business purposes without charge.  If you wish to sell or distribute
  25.  *  the Harvest software to commercial clients or partners, you must
  26.  *  license the software.  See
  27.  *  http://harvest.cs.colorado.edu/harvest/copyright,licensing.html#licensing.
  28.  *  
  29.  *  The Harvest software is provided ``as is'', without express or
  30.  *  implied warranty, and with no support nor obligation to assist in its
  31.  *  use, correction, modification or enhancement.  We assume no liability
  32.  *  with respect to the infringement of copyrights, trade secrets, or any
  33.  *  patents, and are not responsible for consequential damages.  Proper
  34.  *  use of the Harvest software is entirely the responsibility of the user.
  35.  *  
  36.  *  For those who are using Harvest for non-commercial purposes, you may
  37.  *  make derivative works, subject to the following constraints:
  38.  *  
  39.  *  - You must include the above copyright notice and these accompanying 
  40.  *    paragraphs in all forms of derivative works, and any documentation 
  41.  *    and other materials related to such distribution and use acknowledge 
  42.  *    that the software was developed at the above institutions.
  43.  *  
  44.  *  - You must notify IRTF-RD regarding your distribution of the 
  45.  *    derivative work.
  46.  *  
  47.  *  - You must clearly notify users that your are distributing a modified 
  48.  *    version and not the original Harvest software.
  49.  *  
  50.  *  - Any derivative product is also subject to the restrictions of the 
  51.  *    copyright, including distribution and use limitations.
  52.  *  
  53.  */
  54. #ifndef _CCACHE_H_
  55. #define _CCACHE_H_
  56.  
  57. #include <stdio.h>    /* for FILE */
  58. #include "url.h"    /* for URL */
  59. #include "config.h"
  60.  
  61. #ifndef _PARAMS
  62. #if defined(__STDC__) || defined(__cplusplus) || defined(__STRICT_ANSI__)
  63. #define _PARAMS(ARGS) ARGS
  64. #else /* Traditional C */     
  65. #define _PARAMS(ARGS) ()      
  66. #endif /* __STDC__ */              
  67. #endif /* _PARAMS */   
  68.  
  69. typedef char Datum;
  70. typedef int Boolean;
  71.  
  72. #define HASH_SLOTS     (256)
  73. #define MIN_CONNECTIONS    3    /* Min number of connections to maintain. */
  74. #define MIN_TIMEOUT    5    /* Min timeout in minutes. */
  75.  
  76. typedef enum {
  77.     INACTIVE, MEMORY_ONLY, FILE_ONLY, OPTIMIZE, TEMP
  78. } BufferStatus;
  79.  
  80. typedef struct SockCntlRec {
  81.     int timerid;            /* ID of the expiration timer. */
  82.     URL *socketInfo;        /* The URL structure */
  83.     int theSocket;
  84.     unsigned long theHostIP;
  85.     char *incomDataBuf;        /* Incoming data buffer */
  86.     FILE *incomDataFile;        /* Incoming data file buffer */
  87.     int incomDataSize;        /* Number of bytes in buffer */
  88.     BufferStatus sockStateStor;    /* Default status for buffering */
  89.     struct SockCntlRec *hashPrev;    /* Hash table previous */
  90.     struct SockCntlRec *hashNext;    /* Hash table next */
  91.     struct SockCntlRec *listPrev;    /* TimeOut list previous */
  92.     struct SockCntlRec *listNext;    /* TimeOut list next */
  93. } SockCntlRec;
  94.  
  95.  
  96. typedef struct InitConfigRec {
  97.     int maxConnections;    /* max # of socks to keep open at one time. */
  98.     long timeOut;        /* TimeOut time in seconds. */
  99. } InitConfigRec;
  100.  
  101. enum ptype {
  102.         STR, INT, POINTER, MD5
  103. };
  104.  
  105. typedef enum ptype PType;
  106.  
  107. #define MAX_LINE_LENGTH            1024
  108. #define MAX_FILENAME_LENGTH        1024
  109. #define HOST_NAME_LENGTH        1024
  110. #define SERV_REPLY_LENGTH        3
  111. #define BUFFER_SIZE            1024    /* buffer size for read calls */
  112. #define INIT_FILE_SIZE            50000    /* bufsz if read files in mem */
  113. #define REALLOC_BLOCK            2048    /* blk sz on realloc calls */
  114. #define BACK_LOG            5
  115. #define ACCEPT_TIMEOUT            5    /* time in seconds to timeout */
  116. #define READ_TIMEOUT            5    /* if no data on line */
  117.  
  118. #define MULTI_LINE_CODE            '-'
  119.  
  120. /* 
  121.  *  Controls newly created files permissions, as per chmod() arguments.
  122.  *  Final permissions are determined by process umask settings
  123.  */
  124. #define INIT_PERMISSION            0666    /* 'rw-rw-rw-' */
  125.  
  126. #define MAX_MESSAGE_LENGTH        50
  127. #define PORT_MESSAGE_LENGTH        12
  128.  
  129. /* ftp message defines */
  130. #define CONNECT                "CONNECT"
  131. #define USER                "USER"
  132. #define PASSWD                "PASS"
  133. #define MODE                "MODE"
  134. #define TYPE                "TYPE"
  135. #define RETRIEVE            "RETR"
  136. #define PORT                "PORT"
  137. #define REINIT                "REIN"
  138. #define DISCONNECT            "QUIT"
  139.  
  140. /* numerical defines for previous for fast compares */
  141. #define CONNECT_CHK            0
  142. #define USER_CHK            1
  143. #define PASSWD_CHK            2
  144. #define MODE_CHK            3
  145. #define TYPE_CHK            4
  146. #define RETRIEVE_CHK            5
  147. #define PORT_CHK            6
  148. #define REINIT_CHK            7
  149. #define DISCONNECT_CHK            8
  150.  
  151.  
  152. /* ftp mode and type defines */
  153. #define IMAGE                'I'
  154. #define STREAM                'S'
  155.  
  156. /* ftp server reply codes */
  157. #define DATA_CONN_OPEN            (0x31323500)    /* "125" */
  158. #define START_TRANS            (0x31353000)    /* "150" */
  159. #define CMD_OKAY            (0x32303000)    /* "200" */
  160. #define CLOSING                (0x32323100)    /* "221" */
  161. #define CONNECT_EST            (0x32323000)    /* "220" */
  162. #define TRANS_SUCCESS            (0x32323600)    /* "226" */
  163. #define USER_LOGIN            (0x32333000)    /* "230" */
  164. #define SEND_PASS            (0x33333100)    /* "331" */
  165.  
  166.  
  167. typedef struct data_return {
  168.     Boolean inMemory;    /* set if return file in mem */
  169.     Boolean useTempFile;    /* set if use temp file */
  170.     char *buffer;        /* for memory return */
  171.     char fileName[MAX_FILENAME_LENGTH];    /* save if not in memory */
  172.     long fileSize;        /* data size */
  173. } DataReturn;
  174.  
  175. typedef short ERRCODE;
  176. typedef int CacheErr;
  177.  
  178. #define SERV_NOT_RDY      (0x31323000)    /*"120" */
  179. #define NEED_ACCOUNT       (0x33333200)    /*"332" */
  180. #define SERV_NOT_AVAIL     (0x34323100)    /*"421" */
  181. #define SYNTAX_ERR         (0x35303000)    /*"500" */
  182. #define SYNTAX_ERR_PARM    (0x35303100)    /*"501" */
  183. #define CMD_NOT_IMPL       (0x35303200)    /*"502" */
  184. #define BAD_CMD_SEQ        (0x35303300)    /*"503" */
  185. #define CMD_UNIMP_PARM     (0x35303400)    /*"504" */
  186. #define NOT_LOGD_IN        (0x35333000)    /*"530" */
  187. #define FILE_NOT_FOUND    (0x35353000)    /*"550" */
  188.  
  189. #define noErr        0
  190. #define srvNotRdy    1
  191. #define needAccnt    2
  192. #define srvNotAvl    3
  193. #define syntaxErr    4
  194. #define cmdNotImp    5
  195. #define badCmdSeq    6
  196. #define cmdNImpParam    7
  197. #define notLogdIn    8
  198.  
  199. #define initSockErr    9
  200. #define readSockErr    10
  201. #define getSockErr    11
  202. #define getHostErr    12
  203. #define connectErr    13
  204. #define memoryErr    14
  205. #define writeSockErr    15
  206. #define setSockOptErr    16
  207. #define getHNameErr    17
  208. #define getHBNameErr    18
  209. #define getSNameErr    19
  210. #define bindErr        20
  211. #define fileOpenErr    22
  212. #define writeFileErr    23
  213. #define tmpNameErr    24
  214. #define acceptTOut    25
  215. #define readTOut    26
  216. #define argInvalid    27
  217. #define noReply        28
  218. #define badParam    29
  219. #define urlErr        30
  220. #define badurlType    31
  221. #define fileNotFound    32
  222.  
  223. #define NO_ERROR        0
  224. #define INIT_SOCKET_ERR        -1
  225. #define READ_FROM_SOCK_ERR    -2
  226. #define GET_SOCKET_ERR        -3
  227. #define GETHOST_ERR        -4
  228. #define CONNECT_ERR        -5
  229. #define MEMORY_ERROR        -6
  230. #define WRITE_TO_SOCK_ERR    -7
  231. #define SET_SOCKOPT_ERR        -8
  232. #define GET_HOSTNAME_ERR    -9
  233. #define GET_HOSTBYNAME_ERR    -10
  234. #define GET_SOCKNAME_ERR    -11
  235. #define BIND_ERR        -12
  236. #define FILE_OPEN_ERR        -14
  237. #define WRITE_FILE_ERR        -15
  238. #define CANT_GET_TMPNAME    -16
  239.  
  240. #define SERV_REPLY_ERROR    -20
  241. #define NO_PASS_REQ        -21
  242. #define ACCEPT_TIMEOUT_ERR    -22
  243. #define READ_TIMEOUT_ERR    -23
  244. #define ARGUMENT_INVALID    -24
  245. #define NO_REPLY_PRESENT    -25
  246.  
  247. #define BAD_PARAM_ERR    -50
  248. #define URL_ERR        -51
  249. #define BAD_URL_TYPE    -52
  250.  
  251.  
  252. #ifndef DEBUG
  253. #undef DEBUG            4    /* debug level */
  254. #endif
  255. #ifndef TRUE
  256. #define TRUE            1
  257. #endif
  258. #ifndef FALSE
  259. #define FALSE             0
  260. #endif
  261.  
  262. #define BACK_LOG            5
  263. #define INIT_URL_LEN        256
  264. #define INIT_PARAM_LEN        50
  265. #define REALLOC_BLK        20
  266.  
  267. #define LINE_FEED               '\n'
  268. #define CARRG_RET               '\r'
  269. #define PARAM_END               '.'
  270. #define BLOCK_END               '!'
  271. #define TERM_LEN                3
  272. #define MD5_LEN            32
  273.  
  274. /* timeouts for read calls on sockets */
  275.  
  276. /* timeout for server receiving client request messages */
  277. #define SERVER_TIMEOUT        5    
  278.  
  279. /* timeout for util calls reading params from socket */
  280. #define PARAM_TIMEOUT        5    
  281.  
  282. /* timeout for client waiting for server response */
  283. #define CLIENT_TIMEOUT        120    
  284.  
  285.  
  286. /* ftp.c */
  287. int FTPInit _PARAMS((u_long, int, char *));
  288. int Login _PARAMS((char *, char *, int, Boolean, char *));
  289. int Disconnect _PARAMS((int, char *));
  290. int Retrieve _PARAMS((char *, int,int,Boolean,Boolean, char *, DataReturn *));
  291.  
  292. /* ftp_util.c */
  293. int InitSocket _PARAMS((u_long, int ));
  294. int ReadServReply _PARAMS((int, char *));
  295. int SendMessage _PARAMS((char *, char *, int));
  296. void ReadOutText _PARAMS((int, Boolean, char *));
  297. int CheckServReply _PARAMS((int, char *));
  298. int PrepareDataConnect _PARAMS((int, Boolean));
  299. int RetrieveFile _PARAMS((int, DataReturn *));
  300.  
  301. Boolean DisconnectOne _PARAMS(());
  302. CacheErr GetError _PARAMS(());
  303. char *GetFTPError _PARAMS(());
  304. void DoError _PARAMS((CacheErr, char *));
  305.  
  306. /* ccache_util.c */
  307. int MyRead _PARAMS((int, char *, int, int));
  308. int AddURL _PARAMS((URL *, char **, int, int, Boolean));
  309. int GetURL _PARAMS((URL *, int));
  310. int GetParam _PARAMS((char **, PType, int));
  311. int AddParam _PARAMS((char *, PType,  char **, int *, int, Boolean));
  312. int SocketWrite _PARAMS((int, char *, int));
  313. void PrintURL _PARAMS((URL *));
  314. unsigned long gethostinhex _PARAMS((char *));
  315.  
  316. void SockInit _PARAMS((InitConfigRec *));
  317. DataReturn *SockGetData _PARAMS((URL *, BufferStatus, char *));
  318. void ShutDownCache _PARAMS(());
  319. void DestroyDataReturn _PARAMS((DataReturn *));
  320.  
  321.  
  322. #endif /* _CCACHE_H_ */
  323.